Number of longest increasing subsequence¶
Time: O(N^2); Space: O(N); medium
Given an unsorted array of integers, find the number of longest increasing subsequence.
Example 1:
Input: nums = [1,3,5,4,7] Output: 2
Explanation:
The two longest increasing subsequence are [1, 3, 4, 7] and [1, 3, 5, 7].
Example 2:
Input: nums =[2,2,2,2,2]
Output: 5
Explanation:
The length of longest continuous increasing subsequence is 1, and there are 5 subsequences’ length is 1, so output 5.
Constraints:
Length of the given array will be not exceed 2000 and the answer is guaranteed to be fit in 32-bit signed int.
[1]:
class Solution1(object):
"""
Time: O(N^2)
Space: O(N)
"""
def findNumberOfLIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
result, max_len = 0, 0
dp = [[1, 1] for _ in range(len(nums))] # {length, number} pair
for i in range(len(nums)):
for j in range(i):
if nums[i] > nums[j]:
if dp[i][0] == dp[j][0]+1:
dp[i][1] += dp[j][1]
elif dp[i][0] < dp[j][0]+1:
dp[i] = [dp[j][0]+1, dp[j][1]]
if max_len == dp[i][0]:
result += dp[i][1]
elif max_len < dp[i][0]:
max_len = dp[i][0]
result = dp[i][1]
return result
[2]:
s = Solution1()
nums = [1,3,5,4,7]
assert s.findNumberOfLIS(nums) == 2
nums = [2,2,2,2,2]
assert s.findNumberOfLIS(nums) == 5